tomcat根据繁忙线程数对keepalive进行动态调整 |
您所在的位置:网站首页 › keepalive 原理 › tomcat根据繁忙线程数对keepalive进行动态调整 |
众所周知,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。我们经常所用的tomcat服务器就支持HTTP Keep-Alive。在http1.1中,keepalive默认是开启的。如果需要自定义配置keepalive参数,我们可以在tomcat的server.xml中做如下配置: maxThreads="600" minSpareThreads="100" acceptCount="700" maxConnections="300" //与tomcat建立的最大socket连接数 connectionTimeout="20000" maxKeppAliveRequests="100" //请求个数超过这个数,强制关闭掉socket链接 keepAliveTimeOut="60000" //下次请求过来之前,socket链接保持多久 redirectPort="8443" URIEncoding="utf-8" /> 但是tomcat在实际处理请求的过程中会根据工作线程池中繁忙线程数动态的对keepalive进行开启或者关闭,tomcat源码如下: 在org.apache.coyote.http11.AbstractHttp11Processor这个类的process方法中可以看到 会通过disableKeepAlive这个函数判断,我们再来看看disableKeepAlive这个函数,如下: 通过代码会算出 繁忙线程数/最大线程数的比例,即threadRatio = (threadsBusy * 100) / maxThreads; 接着看getDisableKeepAlivePercentage这个函数 可以看出,如果繁忙线程数/最大线程数 >75%,那么就会主动将keepalive关掉。
实际上这种自动调节措施也是一种防护措施,当客户端并发量比较大的时候,如果一致保持长连接,实际上是很耗服务端资源的,会严重影响性能,所以这里tomcat会动态的根据繁忙线程数来决定是否使用keepalive。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |